package top.mable.payment.controller;

import cn.hutool.json.JSONUtil;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import top.mable.common.vo.DemoMsg;

import java.util.Map;

/**
 * 延时队列 示例
 *
 * 使用场景：处理逻辑需要在方法返回前，通过MQ处理后续逻辑。经常会出现当前事务还没提交，MQ的处理逻辑已经执行，导致查不到数据
 */
@RestController
@RequestMapping("/ttl")
public class TtlMqController {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @RequestMapping("/send")
    public void send(@RequestBody Map<String,String> map){
        DemoMsg msg = new DemoMsg();
        msg.setId(1);
        msg.setContent(JSONUtil.toJsonStr(map));
        msg.setClassName("TtlMqController");
        msg.setMethod("send");
        // 该信息丢入延时队列后，会被丢入死信队列中。在死信队列中获取真正的处理队列中。

        msg.setRoutingKey("demo.demo");
        msg.setExchange("demo-exchange");
        // 设置的是ttl 配置的exchange + key
        rabbitTemplate.convertAndSend("ttl_direct_exchange","ttl",msg);
    }
}
